﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace console.demo.senior
{
    /**
     * 索引器
     * 索引器允许类或解构的实例就像数组一样进行索引,无需显示指定类型或实例成员,
     * 索引器允许一个对象可以像数组一样使用下标的方式来访问
     * 索引器的行为的声明在某种程度上类似于属性,可以使用get,set访问器来定义索引器,但是,属性返回或设置一个特定的数据成员,而索引器返回或设置对象实例的一个特定的值
     * 换句话说,它把实例数据分为更小的部分,并索引每个部分,获取或设置每个部分
     * 索引器定义的时候不带有名称但带有关键字,它指向对象实例
     */
    public class IndexDemo
    {
        private string[] nameList = new string[size];
        static public int size = 10;
        public IndexDemo()
        {
            for (int i = 0; i < size; i++)
            {
                nameList[i] = "n'a";
            }
        }
        public string this[int index]
        {
            get
            {
                string tmp;
                if (index >= 0 && index <= size - 1)
                {
                    tmp = nameList[index];
                }
                else
                {
                    tmp = "";
                }
                return tmp;
            }
            set
            {
                if (index >= 0 && index <= size - 1)
                {
                    nameList[index] = value;
                }
            }
        }

        public int this[string name]
        {
            get
            {
                int index = 0;
                while (index < size)
                {
                    if (nameList[index] == name)
                    {
                        return index;
                    }
                    index++;
                }
                return index;
            }
        }
        public void get()
        {
            this[0] = "zara";
            this[1] = "riz";
            this[2] = "nuhua";
            for (int i = 0; i < nameList.Length; i++)
            {
                Console.WriteLine(nameList[i]);
            }
            Console.WriteLine(this["zara"]);
        }
    }
}
